# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import os

# 设置输出文件夹路径
output_folder = r'output/19'
os.makedirs(output_folder, exist_ok=True)

# 加载数据（请替换为实际文件路径）
file_path = r'data/19/客户行为分析-原始数据(2).xlsx'

# 读取客户购物行为数据表
df_behavior = pd.read_excel(file_path, usecols="A:E", header=0)
df_behavior.columns = ['统计日期', '商品浏览量', '商品收藏次数', '支付件数', '下单件数']

# 确保日期列是datetime类型
df_behavior['统计日期'] = pd.to_datetime(df_behavior['统计日期'])

# 筛选出2022年2月的数据
start_date = datetime(2022, 2, 1)
end_date = datetime(2022, 2, 28)
df_feb = df_behavior[(df_behavior['统计日期'] >= start_date) & (df_behavior['统计日期'] <= end_date)]

# 计算综合评分：这里简单地将支付件数和下单件数相加作为评分标准
df_feb['综合评分'] = df_feb['支付件数'] + df_feb['下单件数']

# 找出表现最好的一天
best_day = df_feb.loc[df_feb['综合评分'].idxmax()]
print(f"整体来看，2022年2月 {best_day['统计日期'].day} 日客户购物行为数据表现最好。")

# 找出表现最差的两天
worst_two_days = df_feb.nsmallest(2, '综合评分')
print(f"整体来看，客户购物行为数据表现最差的两天分别是：2022年2月 {worst_two_days.iloc[0]['统计日期'].day} 日和2月 {worst_two_days.iloc[1]['统计日期'].day} 日。")

# 设置中文字体
font_path = r'fonts\SIMSUN.TTC'  # 请根据实际路径调整
font_prop = FontProperties(fname=font_path)

# 绘制组合图
plt.figure(figsize=(14, 7))
plt.plot(df_feb['统计日期'], df_feb['商品浏览量'], label='商品浏览量', marker='o')
plt.plot(df_feb['统计日期'], df_feb['商品收藏次数'], label='商品收藏次数', marker='s')
plt.plot(df_feb['统计日期'], df_feb['支付件数'], label='支付件数', marker='^')
plt.plot(df_feb['统计日期'], df_feb['下单件数'], label='下单件数', marker='x')

plt.xlabel('日期', fontproperties=font_prop)
plt.ylabel('数量', fontproperties=font_prop)
plt.title('2022年2月客户购物行为分析', fontproperties=font_prop)
plt.legend(prop=font_prop)
plt.grid(True)
plt.xticks(rotation=45, fontproperties=font_prop)
plt.tight_layout()

# 保存图表到指定文件夹
output_image_path = os.path.join(output_folder, 'customer_behavior_analysis.png')
plt.savefig(output_image_path, dpi=300, bbox_inches='tight')
plt.show()

# 分析结论
analysis_conclusion = """
根据2022年2月的客户购物行为数据，我们可以得出以下结论：
1. 商品浏览量和商品收藏次数在月初和月末相对较高，这可能是由于促销活动或节假日的影响。
2. 支付件数和下单件数与商品浏览量和商品收藏次数并不完全一致，表明有些顾客虽然浏览和收藏了商品，但最终并未完成购买。
3. 表现最好的一天是{best_day}，这一天的支付件数和下单件数显著高于其他日子，可能是由于特殊促销活动或广告推广。
4. 表现最差的两天分别是2月{worst_day_1}日和2月{worst_day_2}日，这两天的各项指标均处于低位，可能是由于缺乏促销活动或市场竞争激烈。
"""

print(analysis_conclusion.format(
    best_day=best_day['统计日期'].strftime('%m月%d日'),
    worst_day_1=worst_two_days.iloc[0]['统计日期'].day,
    worst_day_2=worst_two_days.iloc[1]['统计日期'].day
))

# 保存分析结论到文本文件
output_text_path = os.path.join(output_folder, 'analysis_conclusion.txt')
with open(output_text_path, 'w', encoding='utf-8') as f:
    f.write(analysis_conclusion.format(
        best_day=best_day['统计日期'].strftime('%m月%d日'),
        worst_day_1=worst_two_days.iloc[0]['统计日期'].day,
        worst_day_2=worst_two_days.iloc[1]['统计日期'].day
    ))